package org.etnaframework.module.cron;

/**
 * 定时任务运行模式
 * <p>
 * 此项用于集群部署的场景，例如某订单处理服务，为了高可用通常采用下列的方式部署：
 * -------------
 * LoadBalance (LB)
 * |----------> Instance A
 * |----------> Instance B
 * |----------> Instance C
 * <p>
 * 当有请求来时，通过LB做分发，转发到A/B/C中的任一个处理，这样任意一个点出了问题其他的都能顶替上
 * <p>
 * 这个系统里面的定时任务也分为以下情况：
 * 1、每个实例都需要执行的任务，例如拉取配置信息，对应{@link #Everyone}
 * 2、同一时间只需要一个实例执行的任务，例如关闭超时的订单，对应{@link #ChampionOnly}
 * <p>
 * 单机模式部署时由于只有1个实例，两种配置方式没有本质上的区别
 *
 * @author jasyaf
 * @since 2024-04-06
 */
public enum CronRunModeEnum {

    /**
     * 同一个任务，所有实例都执行
     */
    Everyone,

    /**
     * 同一个任务，同一时间只有一个实例执行，用抢占令牌的方式决定谁来执行
     */
    ChampionOnly
}
